In a two dimensional matrix of data cells, each cell has two defining features: a function (e.g. tuple function) and a value. The function is editable by a user and when run, an associated value is returned and displayed in the cell. In a multidimensional database, a tuple is comprised of a set of data members from different dimensions, where one of the dimensions contains measure members (e.g. tuple, ([Products].[All Products], [Years].[All Years], [Measure].[Revenue]).
When a cell with a tuple function is run, the value of the tuple is looked up in a local cache. If a local cache of a data processing system contains no value for the tuple, the tuple is requested from a server. The cache can be cleared at any time and a collection of cells or all of the cells can be refreshed in one operation. When the refreshing occurs, the tuples are collected in a randomized order. After all of the tuples are collected, the request is made to the server and the tuples are batched together in one request. However, this conventional batch tuple request is inefficient because it is common for multiple tuples to share member references.
To overcome this issue, conventional methods include utilizing a transformation to convert the batch tuple request into a crossjoin of a collection of member sets across each dimension. Thus, the asymmetric request is converted into a symmetric request. This conventional method has the drawback of returning more data than the batch tuple request. Therefore, there is a strong need for a cost-effective and efficient solution that converts a batch tuple request into a collection of symmetric requests while minimizing the amount of extra data that would result from the conversion. The present invention addresses such a need.